package com.harry9137.ct.tileentity;
import com.harry9137.ct.energy.IEnergyContainer;
import com.harry9137.ct.utillity.ListHelper;
import com.harry9137.ct.utillity.TileHelper;
import net.minecraft.block.Block;
import net.minecraft.block.material.Material;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.init.Blocks;
import net.minecraft.init.Items;
import net.minecraft.inventory.IInventory;
import net.minecraft.item.*;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.IChatComponent;
import net.minecraftforge.fml.common.registry.GameRegistry;
import java.util.ArrayList;
public class TileEntityGenerator extends TileEntity implements IEnergyContainer, IInventory, ITickUpdater {
public TileEntityGenerator(){
}
public int UpdateTick;
public int PowerStored = 0;
public int fuelBuffer = 0;
public int fuelBufferMax = 40000;
public ItemStack[] items = new ItemStack[1];
@Override
public void updateEntity(){
ArrayList<IEnergyContainer> availableBlocks = new ArrayList<IEnergyContainer>();
if(UpdateTick == 5) {
availableBlocks.clear();
for (TileEntity temp : TileHelper.getBlockSides(this)) {
if (temp instanceof TileEntityWire) {
ArrayList<IEnergyContainer> connectors = new ArrayList<IEnergyContainer>();
connectors.add(this);
ArrayList<IEnergyContainer> temp2 = ((TileEntityWire) temp).getPossibleConnections(connectors);
availableBlocks = ListHelper.combine(temp2, availableBlocks);
}
if (temp instanceof IEnergyContainer && !(temp instanceof TileEntityWire)) {
availableBlocks.add((IEnergyContainer) temp);
}
}
UpdateTick = 0;
}
for(IEnergyContainer temp3 : availableBlocks){
if(temp3.getCanReceivePower() && this.PowerStored > 0){
temp3.setPowerLevel(temp3.getEnergyLevel() + 1);
temp3.onEnergyUpdate();
this.PowerStored--;
}
}
if(items[0] != null){
System.out.println("Generator: " + Integer.toString(getItemBurnTime(items[0])));
if(getItemBurnTime(items[0]) > 0){
this.PowerStored++;
if(items[0].stackSize > 1) {
items[0].stackSize = items[0].stackSize - 1;
}
else{
items[0] = null;
}
}
}
UpdateTick++;
}
@Override
public int getEnergyLevel() {
return PowerStored;
}
@Override
public boolean getCanSendPower() {
return true;
}
@Override
public boolean getCanReceivePower() {
return false;
}
@Override
public int getEnergyMax() {
return 1000;
}
@Override
public void onEnergyUpdate() {
}
@Override
public void setPowerLevel(int powerLevel) {
this.PowerStored = powerLevel;
}
@Override
public int getSizeInventory() {
return 1;
}
@Override
public ItemStack getStackInSlot(int p_70301_1_) {
return items[0];
}
@Override
public ItemStack decrStackSize(int i, int j) {
if (items[i] != null)
{
if (items[i].stackSize <= j)
{
ItemStack itemstack = items[i];
items[i] = null;
markDirty();
return itemstack;
}
ItemStack itemstack1 = items[i].splitStack(j);
if (items[i].stackSize == 0)
{
items[i] = null;
}
markDirty();
return itemstack1;
}
else
{
return null;
}
}
@Override
public ItemStack getStackInSlotOnClosing(int p_70304_1_) {
return null;
}
@Override
public void setInventorySlotContents(int p_70299_1_, ItemStack p_70299_2_) {
this.items[p_70299_1_] = p_70299_2_;
if (p_70299_2_ != null && p_70299_2_.stackSize > this.getInventoryStackLimit())
{
p_70299_2_.stackSize = this.getInventoryStackLimit();
}
this.markDirty();
}
@Override
public int getInventoryStackLimit() {
return 64;
}
@Override
public boolean isUseableByPlayer(EntityPlayer p_70300_1_) {
return true;
}
@Override
public void openInventory(EntityPlayer playerIn) {
}
@Override
public void closeInventory(EntityPlayer playerIn) {
}
@Override
public boolean isItemValidForSlot(int slot, ItemStack item) {
System.out.println(Integer.toString(GameRegistry.getFuelValue(item)));
if(GameRegistry.getFuelValue(item) > 0){
return true;
}
return false;
}
@Override
public int getField(int id) {
return 0;
}
@Override
public void setField(int id, int value) {
}
@Override
public int getFieldCount() {
return 0;
}
@Override
public void clear() {
}
public static int getItemBurnTime(ItemStack p_145952_0_)
{
if (p_145952_0_ == null)
{
return 0;
}
else
{
Item item = p_145952_0_.getItem();
if (item instanceof ItemBlock && Block.getBlockFromItem(item) != Blocks.air)
{
Block block = Block.getBlockFromItem(item);
if (block == Blocks.wooden_slab)
{
return 150;
}
if (block.getMaterial() == Material.wood)
{
return 300;
}
if (block == Blocks.coal_block)
{
return 16000;
}
}
if (item instanceof ItemTool && ((ItemTool)item).getToolMaterialName().equals("WOOD")) return 200;
if (item instanceof ItemSword && ((ItemSword)item).getToolMaterialName().equals("WOOD")) return 200;
if (item instanceof ItemHoe && ((ItemHoe)item).getMaterialName().equals("WOOD")) return 200;
if (item == Items.stick) return 100;
if (item == Items.coal) return 1600;
if (item == Items.lava_bucket) return 20000;
if (item == Item.getItemFromBlock(Blocks.sapling)) return 100;
if (item == Items.blaze_rod) return 2400;
return GameRegistry.getFuelValue(p_145952_0_);
}
}
@Override
public String getName() {
return null;
}
@Override
public boolean hasCustomName() {
return false;
}
@Override
public IChatComponent getDisplayName() {
return null;
}
}